package com.zimmur.app.mocolink.service;

import com.zimmur.app.mocolink.domain.form.ShipOrderForm;
import com.zimmur.app.mocolink.domain.model.Order;
import com.zimmur.app.mocolink.domain.model.OrderDetail;
import com.zimmur.app.mocolink.domain.model.UserAddress;
import com.zimmur.app.mocolink.domain.param.OrderParam;
import com.zimmur.app.mocolink.domain.param.OrderParamForManage;
import com.zimmur.app.mocolink.domain.vo.OrderInfo;
import com.zimmur.app.mocolink.domain.vo.OrderVo;
import com.zimmur.app.mocolink.domain.vo.OrderVoForManage;
import com.zimmur.app.mocolink.domain.util.PageUtil;

public interface IOrderService {

	/**
	 * 根据明细主键查询
	 *@Description
	 *@param orderDetailId
	 *@return 
	 *@author zcx
	 *@Time 2017年10月13日 下午9:18:09
	 */
	OrderDetail selectDetailById(Integer orderDetailId);
	/**
	 * 根据评价结果更新订单信息
	 *@Description
	 *@return 
	 *@author zcx
	 *@Time 2017年10月13日 下午9:37:28
	 */
	int commentOrderDetail(OrderDetail orderDetail);
	/**
	 * 根据购物车信息创建订单
	 *@Description
	 *@param userAddress
	 *@param cartIds
	 *@param userId
	 *@return -1 用户或商品信息不存在,-2库存不足,-3购买商品数为零
	 *@author zcx
	 *@Time 2017年10月16日 上午9:23:57
	 */
	int addOrder(UserAddress userAddress,String[] cartIds,Integer userId,String remark);
	/**
	 * 根据主键查询订单
	 *@Description
	 *@param orderId
	 *@return 
	 *@author zcx
	 *@Time 2017年10月16日 下午3:40:40
	 */
	Order selectByOrderId(Integer orderId);
	/**
	 * 主键修改订单
	 *@Description
	 *@param order
	 *@return 
	 *@author zcx
	 *@Time 2017年10月16日 下午3:40:49
	 */
 	int  updateOrder(Order order);
 	/**
 	 * 根据条件查询用户订单
 	 *@Description
 	 *@param param
 	 *@return 
 	 *@author zcx
 	 *@Time 2017年10月16日 下午4:15:09
 	 */
 	PageUtil<OrderVo> selectByParam(OrderParam param);
 	/**
 	 * 条件查询订单（管理后台）
 	 *@Description
 	 *@param param
 	 *@return 
 	 *@author zcx
 	 *@Time 2017年10月26日 下午2:23:23
 	 */
 	PageUtil<OrderInfo> selectByParam(OrderParamForManage param);
 	/**
 	 * 支付订单
 	 *@Description
 	 *@param orderId
 	 *@return  -1异常订单，-2订单状态异常，-3用户余额不足
 	 *@author zcx
 	 *@Time 2017年10月27日 下午1:44:21
 	 */
 	int payOrder(Integer orderId,String adminName);
 	/**
 	 * 查询订单详情
 	 *@Description
 	 *@param orderId
 	 *@return 
 	 *@author zcx
 	 *@Time 2017年10月27日 下午3:16:02
 	 */
 	OrderVoForManage selectOrderDetail(Integer orderId);
 	/**
 	 * 保存物流信息
 	 *@Description
 	 *@param form
 	 *@return -1 订单数据异常，-2订单状态异常
 	 *@author zcx
 	 *@Time 2017年10月27日 下午5:25:05
 	 */
 	int saveShipInfo(ShipOrderForm form);
 	/**
 	 * 更新订单状态
 	 *@Description
 	 *@param orderId
 	 *@param status
 	 *@return -1  订单不存在
 	 *@author zcx
 	 *@Time 2017年10月27日 下午6:13:00
 	 */
 	int updateOrderStatus(Integer orderId,String status);
}
